/**
 * JS Responsável por toda a lógica do mapa de monitoramento.
 */

var timer;
var map = null;
var overlays = [];
var mapInicializado = null;

function chamarServlet() {
	
	jQuery.ajax({
				type : "POST",
				contentType : 'application/json',
				dataType : 'json',
				data : $("#frmDados\\:jsonMonitoramento").val(),
				url : "/ifature/monitorarMapsServlet",
				complete : function(data) {
					if (data != null && data.responseText.length > 0) {
						var lstMonitoramento = jQuery.parseJSON(data.responseText);
						if (lstMonitoramento != null && lstMonitoramento.length > 0) {
							configureMap(lstMonitoramento);
							unregisterTimeout();
							registerTimeout();

						} else {
							var valIdCarga = $("#frmDados\\:valIdCarga");
							var valCompetencia = $("#frmDados\\:valCompetencia");
							
							if(valIdCarga.text().length == 0 && valCompetencia.text().length == 0){
								$('#divMensagem').show();
								$('#frmDados\\:txtMensagem').html("Não foram encontrados registros com esse critério!");
								map = null;
								inicializeMap(-5.298827, -39.552613, 8);
								unregisterTimeout();
							}
						}
					}
				},
				error : function(jqXHR, status) {
					var valIdCarga = $("#frmDados\\:valIdCarga");
					var valCompetencia = $("#frmDados\\:valCompetencia");
					
					if(valIdCarga.text().length == 0 && valCompetencia.text().length == 0){
						$('#divMensagem').show();
						$('#frmDados\\:txtMensagem').html("Falha ao carregar as posições dos leituristas no mapa.");
						map = null;
						mapInicializado = null;
						inicializeMap(-5.298827, -39.552613, 8);
						unregisterTimeout();
					}
				}
			});
};

function inicializeMap(latitude, longitude, varZomm) {

	if (map === null) {
		var mapOptions = {
				center : new google.maps.LatLng(latitude, longitude),
				zoom : varZomm,
				mapTypeId : google.maps.MapTypeId.ROADMAP
			};
			map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
	}
}

function configureMap(lstMonitoramento) {

	if (lstMonitoramento != null) {
		clearOverlay();
		
		if (mapInicializado === null) {
			inicializeMap(lstMonitoramento[0].latitude, lstMonitoramento[0].longitude, 13);
		}
		
		mapInicializado = true;
		
		var infowindow = new google.maps.InfoWindow();
		
		lstMonitoramento.forEach(function(item) {
			if (item.latitude != null && item.longitude != null) 
			{				
				addMarker(item, infowindow);
			}
		});
	}
}

function addMarker(leiturista, infowindow) {
	var marker = new MarkerWithLabel({
		position : new google.maps.LatLng(leiturista.latitude, leiturista.longitude),
		draggable : false,
		raiseOnDrag : false,
		icon : "custom-marker.png",
		labelContent : leiturista.codLeiturista,
		labelAnchor : new google.maps.Point(25, 72),
		labelClass : "labels",
		labelInBackground : false,
		map : map
	});

	overlays.push(marker);

	google.maps.event
	.addListener(
			marker,
			'click',
			function() {
				infowindow
						.setContent('<div>'
								+ '<h4 style="color: #1A60A0; font-weight:bold; font-size: 15px; padding-left:10px;">'
								+ leiturista.codLeiturista
								+ ' - '
								+ leiturista.nomeLeiturista
								+ ' ('
								+ leiturista.statusLeiturista
								+ ')'
								+ '</h4>'
								+ '</div>'
								+ '<div style="margin-top: 10px;">'
								+ '<table cellspacing="10" style="width:100%">'
								+ '<tr style="height:20px;">'
								+ 	'<td style="padding:10px;"><h5>Roteiro</h5>'
								+ 		leiturista.numRoteiro 
								+ 	'</td>'
								+ 	'<td style="padding:10px;"><h5>Qtd. Imóveis</h5>'
								+ 		leiturista.qtdImovel 
								+ 	'</td>'
								+ 	'<td style="padding:10px;"><h5>Qtd. Retornados</h5>'
								+ 		leiturista.qtdImovelRetornado 
								+ 	'</td>'
								+ 	'<td style="padding:10px;"><h5>Status Roteiro</h5>'
								+ 		leiturista.situacaoRoteiro 
								+ 	'</td>'
								+ '</tr>'
								
								+ '<tr style="height:20px;">'
								+ 	'<td style="padding:5px;"><h5>IMEI</h5>'
								+ 		leiturista.imei
								+ 	'</td>'
								+ 	'<td style="padding:5px;"><h5>Chip</h5>'
								+ 		leiturista.chip
								+ 	'</td>'
								+ 	'<td style="padding:5px;"><h5>Número</h5>'
								+ 		leiturista.numero
								+ 	'</td>'
								+ 	'<td style="padding:5px;"><h5>Status Equipamento</h5>'
								+ 		leiturista.statusEquipamento
								+ 	'</td>'
								+ '</tr>' 
								
								+ '<tr style="height:20px;">'
								+ 	'<td style="padding:5px;"><h5>Data do Faturamento</h5>'
								+ 		leiturista.dataFaturamento
								+ 	'</td>'
								+ 	'<td style="padding:5px;"><h5>Data da Geração</h5>'
								+ 		leiturista.dataGeracao
								+ 	'</td>'
								+ 	'<td style="padding:5px;"><h5>Data da Carga</h5>'
								+ 		leiturista.dataCarga
								+ 	'</td>'
								+ 	'<td style="padding:5px;"><h5>Data do Retorno</h5>'
								+ 		leiturista.dataRetorno
								+ 	'</td>'
								+ '</tr>' 
								
								+ '</table>'
								+ '</div>');
				infowindow.open(map, this);
			});
};

/*
 * ##### Funções Utilitárias #####
 */
function clearOverlay() {
	while (overlays[0]) {
		overlays.pop().setMap(null);
	}
}

function registerTimeout() {
	timer = setTimeout("chamarServlet()", 60000);
}

function unregisterTimeout() {
	clearTimeout(timer);
}

ocultarDiv = function(idElemento) {
	jQuery('#' + idElemento).hide();
}